home *** CD-ROM | disk | FTP | other *** search
/ Tech Arsenal 1 / Tech Arsenal (Arsenal Computer).ISO / tek-04 / 4thcmp21.zip / KBDR.4TH < prev    next >
Text File  |  1993-06-23  |  2KB  |  74 lines

  1. \ This program maps the caps lock key to ctrl and right shift + caps lock
  2. \   to caps lock.
  3.  
  4. \ This program is in the public domain
  5.  
  6. 900 CONSTANT PSIZE \ make program load small in case of "LOADHI" command
  7.  
  8. 100 MSDOS
  9.  
  10. INCLUDE INTS
  11. INCLUDE FARMEM1
  12.  
  13. HEX
  14. 15  CONSTANT KBINT    \ keyboard interrupt vector number
  15. 4F  CONSTANT PROCESSKEY    \ code to process a key
  16. 3A  CONSTANT CAPSCODE    \ scan code for caps lock key
  17. 1D  CONSTANT CTRLCODE    \ scan code for ctrl key
  18. 80  CONSTANT RELEASE_INCREMENT
  19.  
  20. 417 CONSTANT KB_FLAG1    \ keyboard flag location
  21. 1   CONSTANT RIGHT_SHIFT \ right shift key
  22. 2   CONSTANT LEFT_SHIFT
  23.  
  24. 7E CONSTANT zero    \ A zero will go here
  25. 7D CONSTANT SAVECODE    \ was it a capslock or a ctrl??
  26. 80 CONSTANT newStart            \ target location of moved code
  27. newStart CONSTANT newOriginalVector
  28. HERE CONSTANT oldStart            \ source location of moved code
  29. CREATE oldOriginalVector   4 ALLOT
  30.  
  31. 80 4 + CONSTANT newProcessKey
  32. L: processKey
  33.  
  34.     PROCESSKEY # AH CMP  =0 IF,  \ this is for us
  35.         CAPSCODE # AL CMP =0 IF,  \ it is CAPS LOCK key
  36.             ES PUSHSEG  CS: zero [] ES >SEG  \ load segment register
  37.             RIGHT_SHIFT # ES: KB_FLAG1 [] BYTE TEST =0  IF,
  38.                 CTRLCODE # AL MOV  THEN,
  39.             AL CS: SAVECODE [] MOV  ES POPSEG  STC
  40.             CS: newOriginalVector JMPF
  41.         THEN,
  42.         CAPSCODE RELEASE_INCREMENT + # AL CMP =0 IF,  \ it is CAPS LOCK key release
  43.             CS: SAVECODE [] AL MOV 
  44.             RELEASE_INCREMENT # AL ADD  STC
  45.             CS: newOriginalVector JMPF
  46.         THEN,
  47.     THEN,
  48.     STC   CS: newOriginalVector JMPF
  49. END-CODE
  50.  
  51. HERE oldStart - CONSTANT RESIDENTSIZE
  52.  
  53. 0 0 IN/OUT
  54. CODE tsr  ( terminate and stay resident )
  55.     newStart RESIDENTSIZE + 10 /  1+ # DX MOV
  56.     3100 # AX MOV
  57.     21 INT
  58. END-CODE
  59.     
  60. : MAIN  
  61.     ." CAPSLOCK -> CTRL,  RIGHTSHIFT + CAPSLOCK -> CAPSLOCK" CR
  62.     ." By Tom Almy" CR
  63.     0 zero !
  64.     KBINT get-handler  oldOriginalVector 2!
  65.     oldStart newStart RESIDENTSIZE CMOVE    \ relocate code
  66.     ?CS: newProcessKey KBINT set-handler
  67.     2C @ FREE    \ get rid of ENV block
  68.     tsr
  69. ;
  70.  
  71. INCLUDE FARMEM2
  72. INCLUDE FORTHLIB
  73. END
  74.